/**
 * $.include - script inclusion jQuery plugin
 * Based on idea from http://www.gnucitizen.org/projects/jquery-include/
 * @author Tobiasz Cudnik
 * @link http://meta20.net/.include_script_inclusion_jQuery_plugin
 * @license MIT
 */
// overload jquery's onDomReady
if ( jQuery.browser.mozilla || jQuery.browser.opera ) {
    document.removeEventListener( "DOMContentLoaded", jQuery.ready, false );
    document.addEventListener( "DOMContentLoaded", function(){ jQuery.ready(); }, false );
}
jQuery.event.remove( window, "load", jQuery.ready );
jQuery.event.add( window, "load", function(){ jQuery.ready(); } );
jQuery.extend({
    includeStates: {},
    include: function(url, callback, dependency){
        if ( typeof callback != 'function' && ! dependency ) {
            dependency = callback;
            callback = null;
        }
        url = url.replace('\n', '');
        jQuery.includeStates[url] = false;
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.onload = function () {
            jQuery.includeStates[url] = true;
            if ( callback )
                callback.call(script);
        };
        script.onreadystatechange = function () {
            if ( this.readyState != "complete" && this.readyState != "loaded" ) return;
            jQuery.includeStates[url] = true;
            if ( callback )
                callback.call(script);
        };
        script.src = url;
        if ( dependency ) {
            if ( dependency.constructor != Array )
                dependency = [dependency];
            setTimeout(function(){
                var valid = true;
                $.each(dependency, function(k, v){
                    if (! v() ) {
                        valid = false;
                        return false;
                    }
                })
                if ( valid )
                    document.getElementsByTagName('head')[0].appendChild(script);
                else
                    setTimeout(arguments.callee, 10);
            }, 10);
        }
        else
            document.getElementsByTagName('head')[0].appendChild(script);
        return function(){
            return jQuery.includeStates[url];
        }
    },
    readyOld: jQuery.ready,
    ready: function () {
        if (jQuery.isReady) return;
        imReady = true;
        $.each(jQuery.includeStates, function(url, state) {
            if (! state)
                return imReady = false;
        });
        if (imReady) {
            jQuery.readyOld.apply(jQuery, arguments);
        } else {
            setTimeout(arguments.callee, 10);
        }
    }
});